package es.uned.etsii.si3.taller;

import java.sql.SQLException;
import java.util.List;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "funciones")
class Funcion extends Persistente {
	static public final String IDENTIFICADOR_FIELD_NAME = "identificador";
	static public final String ID_FIELD_NAME = "id";
	@DatabaseField(generatedId = true, columnName = ID_FIELD_NAME)
	private int id;
	@DatabaseField(width = 50, index = true, unique = true, columnName = IDENTIFICADOR_FIELD_NAME)
	private String identificador;
	@DatabaseField(width = 100)
	private String nombre;
	@DatabaseField
	private boolean activo;

	/**
	 * Factoría para crear nuevas funciones partiendo de su nombre,
	 * al tiempo que se crear el objeto en la base de datos
	 * 
	 * La función creada estará activa de entrada.
	 *
	 * @param  identificador identificador corto para búsquedas
	 * @param  nombre        nombre de la función
	 * 
	 * @return               un nuevo objeto, ya guardado en la base de datos
	 */
	public
	static Funcion crear(String identificador, String nombre) throws SQLException {
		Funcion funcion = new Funcion();

		funcion.setIdentificador(identificador);
		funcion.setNombre(nombre);
		funcion.setActivo(true);
		getClassDao(Funcion.class).create(funcion);

		return funcion;
	}
	
	public
	static Funcion buscarPorIdentificador(String identificador) throws SQLException {
		List<Funcion> funciones = getClassDao(Funcion.class).queryForEq(IDENTIFICADOR_FIELD_NAME, identificador);
		
		// Dado que el campo es unique, no debería haber más de una
		if (funciones.size() > 0)
			return funciones.get(0);
		
		return null;
	}

	public
	Funcion() {
		// ORM Lite necesita un constructor por defecto
	}

	public int     getId()            { return id; }
	public String  getNombre()        { return nombre; }
	public String  getIdentificador() { return identificador; }
	public boolean getActivo()        { return activo; }

	public
	void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public
	void setIdentificador(String identificador) {
		this.identificador = identificador;
	}

	public
	void setActivo(boolean activo) {
		this.activo = activo;
	}

	public
    void activar() throws SQLException {
		setActivo(true);
		update();
	}

	public
	void desactivar() throws SQLException {
		setActivo(false);
		update();
	}
}